// 我们要实现两两交换的效果需要借助一个虚拟节点，还记得两个人互相交换苹果嘛？和两个数交换值一样，需要借助第三个数来拿到这个苹果
// 所以相邻两两交换节点应该是这样的：2的指针指向1，1的指针指向3，但是这样就没有指向2的数了，2节点就丢失了

//  我们首先需要创造一个虚拟节点，通过虚拟节点连接2，让2不丢失

var swapPairs = function (head) {
    // 利用给出我们的方法创建一个虚拟节点。其中已经包含了 dummy.next=head的信息
    let dummy = new ListNode(0, head);
    // 我需要全程利用node0,node1来控制这道题的指针移动，之后我还将引出node3
    let node0 = dummy;
    let node1 = head;
    // 两个条件都需要满足，因为可能是奇数
    while (node1 && node1.next) {
        // 定义顺序
        let node2 = node1.next;
        let node3 = node2.next;
        // 交换指针
        node1.next = node3
        node2.next = node1;
        node0.next = node2;
        // 重定向指针，可以说是核心一步，经过这一步，node1又回到了node0的后面
        node0 = node1;
        node1 = node3;
    }
    // 我们没有改变虚拟节点，所以返回虚拟节点的next即可
    return dummy.next
};